unit uFrmConfImpEtiqueta;

interface

uses
  Generics.Collections,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sComboBox, ImgList, acAlphaImageList, sEdit, sLabel,
  ExtCtrls, ComCtrls, ToolWin, uProduto, uMensagensSistema;

type
  TfrmConfImpEtiqueta = class(TForm)
    ToolBar: TToolBar;
    tbSalvar: TToolButton;
    tbCancelar: TToolButton;
    ToolButton1: TToolButton;
    tbSair: TToolButton;
    pnPanel: TPanel;
    sLabel1: TsLabel;
    edQuantidade: TsEdit;
    sAlphaImageList: TsAlphaImageList;
    cbProdutoInicial: TsComboBox;
    lbGrupoDeTrabalho: TsLabel;
    cbProdutoFinal: TsComboBox;
    sLabel2: TsLabel;
    procedure tbSairClick(Sender: TObject);
    procedure tbCancelarClick(Sender: TObject);
    procedure tbSalvarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    fProdutoInicial   : TList<TProduto>;
    fProdutoFinal     : TList<TProduto>;

    function getProdutoInicial: TList<TProduto>;
    function getProdutoFinal: TList<TProduto>;

    procedure setProdutoInicial(const Value: TList<TProduto>);
    procedure setProdutoFinal(const Value: TList<TProduto>);

    procedure preencheCBProdutoInicial();
    procedure preencheListaProdutoInicial();
    procedure preencheCBProdutoFinal();
    procedure preencheListaProdutoFinal();
    procedure preencheObj();
    procedure abrirImpEtiqueta();
  public
    { Public declarations }
    function validaCampo() : Boolean;

    property ProdutoInicial   : TList<TProduto>    read getProdutoInicial    write setProdutoInicial;
    property ProdutoFinal     : TList<TProduto>    read getProdutoFinal      write setProdutoFinal;
  end;

var
  frmConfImpEtiqueta: TfrmConfImpEtiqueta;

implementation

uses uDmUniSQLProduto, uFrmImpEtiqueta;

{$R *.dfm}

{ TfrmConfImpEtiqueta }

procedure TfrmConfImpEtiqueta.abrirImpEtiqueta;
begin
   try
      if not validaCampo then
      begin
         MensagemAviso('Todo os campos devem ser preenchidos corretamente!');
         Exit;
      end;

      if ( ProdutoInicial.Items[cbProdutoInicial.ItemIndex].idProduto ) >
         ( ProdutoFinal.Items[cbProdutoFinal.ItemIndex].idProduto ) then
      begin
        MensagemAviso('Produto inicial deve ser maior que o produto final!');
        Exit;
      end;

      Application.CreateForm(TfrmImpEtiqueta,frmImpEtiqueta);
      preencheObj;
      frmImpEtiqueta.qrImpEtiqueta.Preview;
   finally
      if assigned(frmImpEtiqueta) then
       FreeAndNil(frmImpEtiqueta);
   end;
end;

procedure TfrmConfImpEtiqueta.FormCreate(Sender: TObject);
begin
  ProdutoInicial := TList<TProduto>.Create;
  ProdutoFinal   := TList<TProduto>.Create;

end;

procedure TfrmConfImpEtiqueta.FormDestroy(Sender: TObject);
begin
  if Assigned(ProdutoInicial) then
    FreeAndNil(fProdutoInicial);
  if Assigned(ProdutoFinal) then
    FreeAndNil(fProdutoFinal);

end;

procedure TfrmConfImpEtiqueta.FormShow(Sender: TObject);
begin
  preencheListaProdutoInicial;
  preencheListaProdutoFinal;
end;

function TfrmConfImpEtiqueta.getProdutoFinal: TList<TProduto>;
begin
  Result := fProdutoInicial;
end;

function TfrmConfImpEtiqueta.getProdutoInicial: TList<TProduto>;
begin
  Result := fProdutoFinal;
end;

procedure TfrmConfImpEtiqueta.preencheCBProdutoFinal;
var
  indice : integer;
begin
   cbProdutoFinal.Clear;
   for indice := 0 to ProdutoFinal.Count - 1 do
    cbProdutoFinal.Items.Add(ProdutoFinal.Items[indice].descricao);
   if (cbProdutoFinal.Items.Count > 0) then
    cbProdutoFinal.ItemIndex := -1;
end;

procedure TfrmConfImpEtiqueta.preencheCBProdutoInicial;
var
  indice : integer;
begin
   cbProdutoInicial.Clear;
   for indice := 0 to ProdutoInicial.Count - 1 do
    cbProdutoInicial.Items.Add(ProdutoInicial.Items[indice].descricao);
   if (cbProdutoInicial.Items.Count > 0) then
    cbProdutoInicial.ItemIndex := -1;
end;

procedure TfrmConfImpEtiqueta.preencheListaProdutoFinal;
begin
   ProdutoFinal.Clear;
   ProdutoFinal := dmUniSQLProduto.listarProdutoCB();

   preencheCBProdutoFinal();
end;

procedure TfrmConfImpEtiqueta.preencheListaProdutoInicial;
begin
   ProdutoInicial.Clear;
   ProdutoInicial := dmUniSQLProduto.listarProdutoCB();

   preencheCBProdutoInicial();

end;

procedure TfrmConfImpEtiqueta.preencheObj;
begin
  frmImpEtiqueta.Quantidade  := StrToInt(edQuantidade.Text);
  frmImpEtiqueta.ProdInicial := ProdutoInicial.Items[cbProdutoInicial.ItemIndex].idProduto;
  frmImpEtiqueta.ProdFinal   := ProdutoFinal.Items[cbProdutoFinal.ItemIndex].idProduto;
end;

procedure TfrmConfImpEtiqueta.setProdutoFinal(const Value: TList<TProduto>);
begin
  fProdutoInicial := Value;
end;

procedure TfrmConfImpEtiqueta.setProdutoInicial(const Value: TList<TProduto>);
begin
  fProdutoFinal := Value;
end;

procedure TfrmConfImpEtiqueta.tbCancelarClick(Sender: TObject);
begin
  Self.Close;
end;

procedure TfrmConfImpEtiqueta.tbSairClick(Sender: TObject);
begin
  Self.Close;
end;

procedure TfrmConfImpEtiqueta.tbSalvarClick(Sender: TObject);
begin
  abrirImpEtiqueta;
end;

function TfrmConfImpEtiqueta.validaCampo: Boolean;
begin
  result := (cbProdutoInicial.ItemIndex <> -1) and (cbProdutoFinal.ItemIndex <> -1) and ( trim(edQuantidade.Text) <> '' )
end;

end.
